package org.zxp.ConcurrentLatch.demo;

import org.zxp.ConcurrentLatch.ConcurrentLatch;
import org.zxp.ConcurrentLatch.ConcurrentLatchExcutorFactory;
import org.zxp.ConcurrentLatch.Constants;
import org.zxp.ConcurrentLatch.LatchThread;
import org.zxp.ConcurrentLatch.demo.dto.PlatformDto;
import org.zxp.ConcurrentLatch.demo.dto.RuleDto;
import org.zxp.ConcurrentLatch.demo.service.PlatformLatch;
import org.zxp.ConcurrentLatch.demo.service.RuleLatch;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.*;
import java.util.stream.Collectors;

/**
 * @program: ConcurrentLatch
 * @description:
 * @author: X-Pacific zhang
 * @create: 2020-07-01 16:29
 **/
public class Test {
    //public static void main(String[] args) throws Exception {
    //    ConcurrentLatch excutor =
    //            ConcurrentLatchExcutorFactory.getConcurrentLatch(ConcurrentLatchExcutorFactory.ExcutorType.PROXY);
    //    /**组织需要并发的业(任)务(务)类对象*/
    //    RuleDto ruleDto = new RuleDto();
    //    ruleDto.setRuleID("zxp123");
    //    ruleDto.setMmmm(0.00001);
    //    LatchThread ruleLatchThread = new RuleLatch(ruleDto);//业务类B
    //    /**将任务推入ConcurrentLatch执行器，不同点是这里只有一个入参*/
    //    excutor.put(()-> {
    //        System.out.println("我是BBB");
    //        try {
    //            Thread.sleep(1000);
    //        } catch (InterruptedException e) {
    //            e.printStackTrace();
    //        }
    //        ruleDto.setMmmm(ruleDto.getMmmm()+ 9999);
    //        return ruleDto;
    //    },"A");
    //    excutor.put(() -> {
    //        System.out.println("我是AAA");
    //        try {
    //            Thread.sleep(1000);
    //        } catch (InterruptedException e) {
    //            e.printStackTrace();
    //        }
    //        PlatformDto dto = new PlatformDto();
    //        dto.setName("0516");
    //        dto.setPremium(6500.98);
    //        dto.setPolicyNo("000000000001");
    //        return dto;
    //    },"B");
    //    /**不可以把一个之前已经有的业务组件再放入池中，即使你重新new了一个实例也不允许，这也是为什么我们不推荐使用这种方式的原因*/
    //    /**通知ConcurrentLatch执行器开始执行所有推入的任务*/
    //    /**这里主线程或调用线程会挂起，直到所有任务都执行完毕*/
    //    Map<String, Object> map = excutor.excute();
    //    /**获取返回值*/
    //    /**这里的key就是上面在注解(LatchTaskName)或者TASKNAME配置的值，能轻松的获取所有的返回对象*/
    //    /**再一次强调，必须把handle方法返回的类配置与对应的LatchThread实现类一致的注解任务名称，否则无法正常获取对应关系*/
    //    for (String key : map.keySet()) {
    //        Object out = map.get(key);
    //        System.out.println("KEY===="+key);
    //        System.out.println(out);
    //    }
    //}

    public static void main(String[] args){
        Map<String,String> map = new HashMap<>();
        map.put("a", "");
        map.put("b", "");
        String collect = map.entrySet().stream().map(e -> e.getValue()).collect(Collectors.joining(","));
        System.out.println(collect);
    }
}
